package hilos;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;

import android.app.ProgressDialog;
import android.content.Context;
import android.os.AsyncTask;
import android.util.Log;
import android.widget.Toast;
import com.bd.dal;
import com.encuestas.preferencias;
import com.encuestas.utilidades;
import com.gio.lib.conexion.sync;

public class subirResultados extends AsyncTask<String, Integer, Integer>
{
	ProgressDialog progressDialog ;
	Context cn;
	preferencias preferer;
	dal dataBd;
	public static final int NoConexion=2;
	public static final int subidaCompleta=1;
	public static final int NotFound=4;
	public static final int Error=3;
	private subirlistener listener;
	

	public interface subirlistener
	{
		public void subidaCompleta();
		public void errorSubida();
		public void errorconexion();
		public void errorhttp(int error);
	}
	public subirResultados(Context cn) {
			
				this.cn = cn;
				preferer = new preferencias(cn);
				dataBd= new dal(cn);
				
			}

	
	public void setListenerSubir(subirlistener listene)
	{
		this.listener=listene;
		
		
	}
	protected Integer doInBackground(String... paramso) {
		
		
	
		List<String> data = new ArrayList<String>();
		for(String s : paramso)
		{
			data.add(s);
		}
		
		
		
		 int tamano=data.size();
		try {
		for (int i = 0,j=1; i< data.size();i++,j++)
		{
			String param ="[" +  data.get(i) + "]";
			HttpParams params = new BasicHttpParams();
			params.setParameter("MAX_TOTAL_CONNECTIONS", 100);
			HttpConnectionParams.setConnectionTimeout(params, 20000);
			HttpConnectionParams.setSoTimeout(params, 200000);
			HttpClient cliente = new DefaultHttpClient(params);
			//HttpPost post = new HttpPost("http://10.0.2.2/guardarmovil.php");
			HttpPost post = new HttpPost(preferer.getServervidor() + "guardarfastjson.php");
			List<NameValuePair> l = new ArrayList<NameValuePair>();
			l.add(new BasicNameValuePair("jsonw", param));
			
			//Log.i("SUBIENDO ESTO", param);
			UrlEncodedFormEntity datos = new UrlEncodedFormEntity(l);
			post.setEntity(datos);
			if(!sync.chequeaConexionInternet(this.cn))
			{
				
				
				return NoConexion;
			
			}
		
			HttpResponse respuesta=cliente.execute(post);
			
		
			String resultado;
			HttpEntity  entiti = respuesta.getEntity();
		int status=	respuesta.getStatusLine().getStatusCode();
		if(status==404)
		{
		return	NotFound;
		}
			if (entiti!= null)
			{
				resultado=utilidades.ObtenerStRes(entiti.getContent());
				cliente.getConnectionManager().shutdown();
				
				dataBd.changeEstadoEnviados(resultado);
				Log.i("MONITOREO GUARDAR ESTADO", "SE GUAROD EL ESTADO" + resultado);
				publishProgress(j*100/tamano);
				
			}
			else
			{
				
				//aca cuando no se reciva nda del servidor
				
				
			}
			
		}
	
	} catch (ClientProtocolException e) {
		progressDialog.dismiss();
		
	return Error;
	
	} catch (IOException e) {
		
		progressDialog.dismiss();
		return Error;
	}
		
		return subidaCompleta;
	}
	
	protected void onPreExecute() {
		
		try {
		
		progressDialog = new ProgressDialog(this.cn);
		progressDialog.setMessage("Enviando datos con el servidor, tenga paciencia");
		progressDialog.setIndeterminate(false);
		progressDialog.setMax(100);
		progressDialog.setProgressStyle(1);
		progressDialog.setCancelable(true);
		progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
		progressDialog.show();
		}
		catch (Exception ex)
		{
			Log.e("error de caja de dialogo", ex.getMessage());
		}
	}
	
	protected void onProgressUpdate(Integer...values) 
	{
		super.onProgressUpdate(values);
		progressDialog.setProgress(values[0]);	
	};
	
	protected void onPostExecute(Integer result) 
	{
		
		if(progressDialog.isShowing())
		{
			progressDialog.dismiss();
			
		}
		
		
		switch (result) {
		case Error:
			if(listener!=null)
				listener.errorSubida();
			break;
		case subidaCompleta:
			if(listener!=null)
				listener.subidaCompleta();
			break;
		case NoConexion:
			if(listener!=null)
				listener.errorconexion();
			break;
			
		default:
			if(listener!=null)
				listener.errorhttp(Error);
			break;
		}
		
		
		
	
		
		
	};
}
